Crate salsa[−][src]
Expand description
The salsa crate is a crate for incremental recomputation. It permits you to define a “database” of queries with both inputs and values derived from those inputs; as you set the inputs, you can re-execute the derived queries and it will try to re-use results from previous invocations as appropriate.
Modules
Debugging APIs: these are meant for use when unit-testing or debugging your application but aren’t ordinarily needed.
Structs
A panic payload indicating that a salsa revision was cancelled.
The error returned when a query could not be resolved due to a cycle
An integer that uniquely identifies a particular query instance within the database. Used to track dependencies between queries. Fully ordered and equatable but those orderings are arbitrary, and meant to be used only for inserting into maps and the like.
Describes how likely a value is to change – how “durable” it is.
By default, inputs have Durability::LOW
and interned values have
Durability::HIGH
. But inputs can be explicitly set with other
durabilities.
The Event
struct identifies various notable things that can
occur during salsa execution. Instances of this struct are given
to salsa_event
.
The “raw-id” is used for interned keys in salsa – it is basically a newtype’d u32. Typically, it is wrapped in a type of your own devising. For more information about interned keys, see the interned key RFC.
Return value from the query
method on Database
.
Gives access to various less common operations on queries.
Return value from the query_mut
method on Database
.
Gives access to the set
method, notably, that is used to
set the value of an input query.
A unique identifier for the current version of the database; each
time an input is changed, the revision number is incremented.
Revision
is used internally to track which values may need to be
recomputed, but is not something you should have to interact with
directly as a user of salsa.
The salsa runtime stores the storage for all queries as well as tracking the query stack and dependencies between cycles.
A unique identifier for a particular runtime. Each time you create
a snapshot, a fresh RuntimeId
is generated. Once a snapshot is
complete, its RuntimeId
may potentially be re-used.
Simple wrapper struct that takes ownership of a database DB
and
only gives &self
access to it. See the snapshot
method
for more details.
Enums
An enum identifying the various kinds of events that can occur.
Traits
The base trait which your “query context” must implement. Gives access to the salsa runtime, which you must embed into your query context (along with whatever other state you may require).
Trait implemented for the “key” that results from a
#[salsa::intern]
query. This is basically meant to be a
“newtype”’d u32
.
Indicates a database that also supports parallel query
evaluation. All of Salsa’s base query support is capable of
parallel execution, but for it to work, your query key/value types
must also be Send
, as must any additional data in your database.
Trait implements by all of the “special types” associated with each of your queries.
Trait implements by all of the “special types” associated with each of your queries.
Attribute Macros
This attribute is placed on your database struct. It takes a list of the query groups that your database supports. The format looks like so:
The decorator that defines a salsa “query group” trait. This is a trait that defines everything that a block of queries need to execute, as well as defining the queries themselves that are exported for others to use.